//
// Created by PC on 2023/4/28.
/*
http://www.aisichuang.net/#/main/Competition/TitlePage?id=1594&raceId=1304&stateanswer=false
 2023春季伴学挑战赛06：C++语言
    时间限制: 1000 MS 内存限制: 256 MB
6的倍数
题目描述
兔兔给你一个十进制正整数n,问你可以从n中截取多少个不同的子串(连续的若干字符),使得子串构成的数字是6的倍数。
例如：当n=1234时，有且仅有12和234这两个子串是6的倍数。
两个子串只要开始或结束位置有不同，即使内容一样也认为是不同子串，不用考虑高位0的问题，006也算合格的子串。
输入格式
单个整数：表示输入的数字n
输出格式
单个整数：表示6的倍数的子串数量。
样例 #1
样例输入 #1
1234
样例输出 #1
2
提示
对于 20% 的数据，1≤n≤10^9
对于 50% 的数据，1≤n≤10^100
对于 70% 的数据，1≤n≤10^1000
对于 100% 的数据，1≤n≤10^10^6

 * */
// 20分方法 用string 转 int 这个方法有点笨
// not pass 只通过了2/10的测试点 后边的8个测试点WA
#include <iostream>

using namespace std;

int main()
{
    int count = 0;
    string a;
    cin>>a;
//    string a = to_string(n);
    for (int i = 0; i < a.size(); ++i)
    {
        for (int j = i; j < a.size(); ++j)
        {
            string t;
            for (int k = i; k < j + 1; ++k)
            {
                t.push_back(a[k]);
//                printf("%d ",a[k]-'0');
            }
//            printf(" length :%d ",j-i+1);
            int num = stoi(t.c_str());
//            printf("%d",stoi(t.c_str()));
            if (num % 6 == 0)
            {
//                cout << num << endl;
                count++;
            }
//            printf("\n");
//            printf("%d\n",num);
        }
    }
    cout<<count<<endl;

//    cout<< n%10000<<endl;
//    cout<< n%1000<<endl;
//    cout<< n%100<<endl;
//    cout<< 0%6<<endl;
    return 0;
}
